/*  -------------------------- (C) COPYRIGHT 2020 Fortiortech ShenZhen ---------------------------*/
/*  File Name      : Protect.h
/*  Author         : Fortiortech  Appliction Team
/*  Version        : V1.0
/*  Date           : 2020-08-18
/*  Description    : 主要用于电机运行保护条件参数设置.
/*  ----------------------------------------------------------------------------------------------*/
/*                                     All Rights Reserved
/*  ----------------------------------------------------------------------------------------------*/

/*  Define to prevent recursive inclusion --------------------------------------------------------*/
#ifndef __PROTECT_H_
#define __PROTECT_H_
#include <Customer.h>

 /*硬件过流保护比较值来源*/
 #define Compare_DAC                    (0)                                   // DAC设置硬件过流值
 #define Compare_Hardware               (1)                                   // 硬件设置硬件过流值
 #define Compare_Mode                   (Compare_DAC)                      	  // 硬件过流值的来源

 #define OverHardcurrentValue           (3.0)                                 // (A) DAC模式下的硬件过流值

 /*软件过流保护*/
 #define OverSoftCurrent_DectTime       (5)                                    ///< (ms)软件过流检测时间
 #define OverSoftCurrentValue           I_Value(3.0)                           // (A) 软件过流值

 /*过欠压保护*/
 #define Over_Protect_Voltage           (28.8)                                  // (V) 直流电压过压保护值
 #define Over_Recover_Vlotage           (27.8)                                  // (V) 直流电压过压保护恢复值
 #define Under_Protect_Voltage          (10.2)                                 	// (V) 直流电压欠压保护值
 #define Under_Recover_Vlotage          (13.2)                                  // (V) 直流电压欠压保护恢复值

 /*堵转保护*/
 #define MOTOR_SPEED_STAL_MAX_RPM       S_Value(6000.0)                                // (RPM) 堵转保护最大转速
 #define MOTOR_SPEED_STAL_MIN_RPM       S_Value(100.0)                                 // (RPM) 堵转保护最小转速

 /*缺相保护*/
 #define PhaseLossCurrentValue          I_Value(0.5)                            // (A)  缺相电流值
 
 /*  保护重启参数设置  */
 #define CurrentRecoverEnable           (0)                                    // 过流恢复, 0，不使能；1，使能
 #define CurrentRecoverTimes            (5)                                    // 重启次数,设定值<255 达到重启次数后不再重启，设定值>=255，一直重启
 #define OverCurrentRecoverTime         (1000)                                 // (5ms) 过流保护恢复时间
 
 #define VoltageRecoverEnable           (1)                                    // 过流恢复, 0，不使能；1，使能
 #define VoltageRecoverTimes            (5)                                    // 重启次数,设定值<255 达到重启次数后不再重启，设定值>=255，一直重启
 #define VoltageRecoverTime             (300)                                 // (5ms) 过流保护恢复时间

 #define StallRecoverEnable             (1)                                    // 堵转保护恢复使能  0，不使能；1，使能
 #define StallRecoverTimes              (5)                                    // 重启次数,设定值<255 达到重启次数后不再重启，设定值>=255，一直重启
 #define StallRecoverTime               (200)                                  // (5ms) 堵转保护恢复时间

 #define StartRecoverEnable             (1)                                    // 启动保护恢复使能  0，不使能；1，使能
 #define StartRecoverTimes              (5)                                    // 重启次数,设定值<255 达到重启次数后不再重启，设定值>=255，一直重启
 #define StartRecoverTime               (200)                                 // (5ms) 启动保护恢复时间 

 #define PhaseLossRecoverEnable         (1)                                    // 缺相保护恢复使能  0，不使能；1，使能
 #define PhaseLossRecoverTimes          (5)                                    // 重启次数,设定值<255 达到重启次数后不再重启，设定值>=255，一直重启
 #define PhaseLossRecoverTime           (1000)                                 // (5ms) 缺相保护恢复时间

 /*保护使能*/
 #define OverSoftCurrentProtectEnable   (1)                                    // 软件过流保护，0,不使能；1，使能
 #define VoltageProtectEnable           (1)                                     // 电压保护，0,不使能；1，使能
 #define StartProtectEnable             (1)                                     // 启动保护，0,不使能；1，使能 
 #define StallProtectEnable             (1)                                     // 堵转保护，0,不使能；1，使能
 #define PhaseLossProtectEnable         (1)                                     // 缺相保护，0,不使能；1，使能
 
typedef struct
{
    uint8  OverCurCnt;                                                          // 软件过流计数

	int16  Is; 
    uint16 Max_ia;                                                              // IA的最大值
    uint16 Max_ib;                                                              // IB的最大值
    uint16 Max_ic;                                                              // IC的最大值
}CurrentVarible;

typedef struct
{
    uint8 SecondStartTimes;                                                    // 二次启动保护的次数
    uint8 StallTimes;                                                          // 堵转保护次数
    uint8 LossPHTimes;                                                         // 缺相保护次数
    uint8 CurrentPretectTimes;                                                 // 过流保护次数
    uint8 StartFlag;                                                          // 启动保护的标志位，用于判断哪个方法起作用
    uint8 StallFlag;                                                          // 堵转保护的标志位，用于判断哪个方法起作用
    uint8 VoltagePretectTimes;                                                // 电压保护次数
}ProtectVarible;

typedef struct
{
    //voltage protect
    uint16 OverVoltDetecCnt;                                                    // 过压检测计数
    uint16 UnderVoltDetecCnt;                                                   // 欠压检测计数
    uint16 VoltRecoverCnt;                                                      // 过压恢复计数

    //OVER Current protect recover
    uint16 CurrentRecoverCnt;                                                   // 过流保护恢复计数

    //stall protect
    uint16 StallDelayCnt;                                                       // 堵转延迟判断计时
    uint16 StallDectEs;                                                         // method 1，与ES相关
    uint16 StallDectSpeed;                                                      // method 2，与速度相关
    uint16 StallReCount;                                                        // 堵转保护恢复计数
    uint16 StallSpeedAndEsCnt;                                                  // 堵转保护恢复时间
    
	//Loss Phase protect
    uint16 Lphasecnt;                                                           // 缺相保护计时
    uint16 AOpencnt ;                                                           // A缺相计数
    uint16 BOpencnt ;                                                           // B缺相计数
    uint16 COpencnt ;                                                           // C缺相计数
	uint16 DectCycleCnt; 
    uint16 mcLossPHRecCount;                                                    // 缺相恢复计数
	
    //start protect
    uint16 StartESCount;                                                         // 启动保护判断ES的计数
    uint16 StartEsCnt;                                                           // 启动保护判断ES的计时
    uint16 StartDelay;                                                           // 启动保护判断ES的延迟
    uint16 StartFocmode;                                                         // 启动保护判断FOCMODE状态的计时
    uint16 StartSpeedCnt;                                                        // 启动保护判断速度和ES的计时
    uint16 StartSpeedAndEsCnt;
	uint16 StartRecoverDelayCnt;                                                  //启动保护恢复延时计数 
}FaultVarible;

typedef enum
{
    FaultNoSource      = 0,                                                     // 无故障
    FaultHardOVCurrent = 1,                                                     // 硬件过流
    FaultSoftOVCurrent = 2,                                                     // 软件过流
    FaultUnderVoltage  = 3,                                                     // 欠压保护
    FaultOverVoltage   = 4,                                                     // 过压保护
    FaultLossPhase     = 5,                                                     // 缺相保护
    FaultStall         = 6,                                                     // 堵转保护
    FaultStart         = 7,                                                     // 启动保护
    FaultOverwind      = 8,                                                     // 顺逆风失败保护
} FaultStateType;

extern FaultVarible   idata mcFaultDect;
extern CurrentVarible  mcCurVarible;
extern ProtectVarible xdata mcProtectTime;
extern FaultStateType xdata mcFaultSource;

extern void   Fault_OverUnderVoltage(void);
extern void   Fault_OverCurrent(void);
extern void   Fault_OverCurrentRecover(void);
extern void   Fault_Stall(void);
extern void   Fault_PhaseLoss(void);
extern void   Fault_Detection(void);

extern void Fault_Detection(void);
#endif

